Many enterprises expect to use the Internet to reach far-flung agents and customers. The Internet is a public network of computer networks, each with one or more nodes. The Internet uses open, standard protocols for addressing nodes and passing information from one node to another. A client application program (a client process) running on the user's computer (client device) interacts with a server application program (a server process) running on a different computer (server device) on the Internet. The client process initiates communication with a request sent to the server device for service from the application program. The application responds by performing some service including sending some content back to the client process. As used hereinafter, a server refers to the server process and a client refers to the client process unless otherwise indicated to refer to the node or device on which the process executes.
The World Wide Web (the Web) is a collection of services available over the Internet, which are provided by various servers and that can be accessed by a particular client called a web browser using a hyper-text transfer protocol (HTTP). Using a web browser, a user can select a service on the Web, identified by its Universal Resource Locator (URL) name, and have that service provided to the user in the form of actions performed by the server and the content returned to the client. The content includes one or more hyper-text markup language (HTML) pages. The content returned usually includes textual information and often includes graphical, video and audio elements. The location on the network associated with a URL is called a website.
Modern architectures for websites often employ mid-tier server devices. Typically, the mid-tier server devices will run a web server and an application. The mid-tier application is a server-side application, rather than a client-side application (such as a web browser). The web server handles requests from clients and provides static content for the services provided by the website. The application provides any dynamic processing for the services provided by the website.
Many applications use a database server to manage data. When responses to client requests depend on data in the database, the application sends database requests to one or more database servers on one or more devices in a database layer. This architecture improves scalability by insulating the database servers from high numbers of concurrent users, to some degree. More users can often be accommodated by more devices and more web servers in the mid-tier.
Certain types of components have become popular, and are used by many mid-tier applications. For example, websites for retailers often rely on a credit card payment component and a shopping cart component in their mid-tier applications. A shopping cart component supports a user purchasing items available through the website. A shopping cart component presents a user with a graphical interface that behaves like a shopping cart in a grocery store. The user selects one or more items offered by the retailer, and adds them to the cart. The user may undergo a change of heart and remove one or more items. Only after the user has decided on the items to be purchased does the user go through the payment component of the application. The shopping cart component is popular with users because the shopping cart component allows the user to avoid repetitious entry, e.g., entry for every item selected, of data such as user name, shipping address, billing address and credit card or account information associated with the payment component.
Many retailers would prefer not to develop their own shopping cart component, payment component and other components of a retail website if ready-made, tested components can be purchased or licensed from third parties at a fraction of the development costs to the retailer.
Problems may arise with the use of third-party components in mid-tier applications. The components are often not engineered for the particular hardware, operating system and network architecture environment of the website being provided. Thus, some of the applications, components, or sub-components may perform poorly, leading to an unpleasant user experience and increased risk of losing potential customers. A website provider therefore is interested in monitoring the performance of third-party applications, components and sub-components so that problem applications, components or sub-components can be identified, bypassed, or reported to the third party that provided them for corrective modifications.
However, the ability of a website provider to monitor components and sub-components is hindered by a lack of tools that provide the desired information. Performance tools are often not provided for each sub-component, and, if provided, are not expected to be consistent among different third parties.
A debugger option may be employed to gather some performance information for some applications or components. A debugger option allows a human to monitor the state of the application at each instruction in the code.
However, the compiled code provided by the third party is often production code that does not include a debugger option. An application with a debugger option consumes extras computer processing and storage space compared to an application without the debugger option. To conserve such system resources, third-party components are often distributed without a debugger option.
Even if a debugger is present, the performance check is manual, tedious to perform, and may involve taking the component off-line; thus, making the website unavailable for its intended purpose for some period of time.
In addition, it is difficult for a website administrator, acting for the website provider, to insert instructions for computing performance. Often, the software provided by the third party is not source code but compiled code, such as Java bytecode, that is not easily read or written by a human website administrator. Also, inserting instructions often entails making the website unavailable for a substantial period of time.
Even if the source code is available, or the website administrator reads and writes in the language of the compiled code, or both, the website administrator may lack the knowledge of the component or sub-component functionality helpful for determining what instructions to insert and where to insert them. Also, such insertions again entail making the component, and hence the website, unavailable for potentially substantial periods of time.
Even if the website administrator has the knowledge to make the changes, such as for an application developed by the website administrator, the process is manual, tedious, and can lead to all or part of the mid-tier application being offline for substantial periods of time.
Based on the above, there is a clear need for techniques that allow an administrator to automatically instrument compiled code of an application to provide new behavior for the application.
Furthermore, there is a need for the new behavior to be provided without taking the application offline for substantial periods of time.
In particular, there is a need for techniques that allow a service provider to automatically instrument existing applications, components, and sub-components to measure and respond to server-side performance without taking the applications offline.